<?php

require_once($common_data_server.'modules/shop/shop.php'); 
include_once($common_data_server."lib/php/captcha.php");

/********************************************************
Project: Пользователи
Author:  Холодий Андрей
Version: 1.0
Date:    21.08.2003 12:02
********************************************************/

 /**Пользователи
  * @author  Холодий Андрей
  * @version 1.1
  * @copyright Copyright 2003, РБК СОФТ
  * @package E-shop
  * @subpackage client
  */


class client extends shop 
{
    //  Это время жизни (в секундах) записей в БД для картинки-кода подтверждения регистрации 
    var $tmp_image_lifetime   = CLIENT_CAPTURE_LIFETIME;
  
    /****************** получить значение сисворда для использования внутри модуля ************************************/
	function get_sysword($name){
		global $arrSYSWORD;
		foreach($arrSYSWORD[$this->lang_id] as $sysword){
			if($sysword["name"]==$name){
				$sysword_value=$sysword["value"];
				break;
			}
		}
		return $sysword_value;
	}

  /****************** content_init ************************************/
  function content_init() {
  	/* 
	  Инициализация модуля.
	*/
	global $common_data_server;
    $this -> path_tmpl = "{$common_data_server}module_templates/client/{$this -> view_param['template']}/";

	// Удаляются специальные символы из полей формы
	if ($this -> q_param)
		foreach ($this -> q_param as $key => $value) $this -> q_param[$key] = htmlspecialchars($value, ENT_QUOTES);

    //Доступные пользователям варианты использования модуля (с точки зрения секъюрности)
    if ( $this -> q_param['mode'] == 'reminder' ) {
        $this -> view_param['view_mode'] = 'reminder';
    }

/*    
    //Применяет режим аунтентификации, если пользователь не аутентифицирован (только для закрытых вариантов использования)
    //закрываем известную дыру
    $_COOKIE['client_id'] =intval($_COOKIE['client_id']);
    $_COOKIE['random_number']=floatval($_COOKIE['random_number']);
        
    //закрываем известную дыру
*/    
    // с 20061219 проверка допустимости значений в cookies клиента 
    // выполняется в методе shop->isRegistratedClient() - автоматически
    if ( !$this -> isRegistratedClient() && 
    	 $this -> view_param['view_mode'] != 'registration' &&
    	 $this -> view_param['view_mode'] != 'auth' &&
    	 $this -> view_param['view_mode'] != 'reminder' ) {
    	    
    	$filename = "auth";
    }

    $file_tmpl = $this -> path_tmpl . ( $filename ? $filename : $this -> view_param['view_mode'] ) . '.vtmpl';
     
    if ( !file_exists( $file_tmpl) ) {
   		$this -> body = "Шаблон отсутствует: $file_tmpl";
   		return 0;
	}


    $this -> tmpl = new vlibTemplate();
    $this -> tmpl -> newTemplate($file_tmpl);


	// Вариант использования "Форма регистрация"
	if ( $this -> view_param["view_mode"] == "registration" )			$this -> modeRegistration();

	// Вариант использования "Форма аутентификации"
	elseif ( $this -> view_param["view_mode"] == "auth") 				$this -> modeAuth();

	// Вариант использования "Личные данные"
	elseif ( $this -> view_param["view_mode"] == "person_data" ) 		$this -> modePersonData();

	// Вариант использования "Список адресов доставки"
	elseif ( $this -> view_param["view_mode"] == "delivery_address" ) 	$this -> modeDeliveryAddress();

	// Вариант использования "Напоминание забытого пароля"
	elseif ( $this -> view_param["view_mode"] == "reminder" ) 			$this -> modeReminder();

	// Вариант использования "История заказов"
	elseif ( $this -> view_param["view_mode"] == "ordersHistory" )		$this -> modeOrdersHistory();

	$this -> tmpl -> setVar( "_tarea", $this -> tarea_id);
	
	//echo $_COOKIE['random_number'];
	//echo " client_id=" . $_COOKIE['client_id'];	

    $this -> body = $this -> tmpl->grab();
  }

  /***************************** Вариант использования "История заказав" *******************/
  function modeOrdersHistory() {

	if ( !$this -> modeAuth() ) return false;
	
	$this -> tmpl -> newTemplate($this -> path_tmpl . $this -> view_param["view_mode"] . ".vtmpl");
	
	// Получение личных данных пользователя
	// Проверка допустимости значений клиентских cookies выполняется в shop->isRegistratedClient(),
	// который вызывается из this -> modeAuth()
	$client_arr = $this -> modeAuth();
	$client_arr = is_array($client_arr) ? 
                        $client_arr : 
                        sql_select("select * from CLIENT" 
                                  . " where CLIENT_ID = {$_COOKIE['client_id']}" 
                                  . " and RANDOM_NUMBER = {$_COOKIE['random_number']}");

	if ( is_numeric($this -> q_param['orders_id']) && 
		 count(sql_select("select * from ORDERS where ORDERS_ID = ".intval($this -> q_param['orders_id'])." and 
		 				   CLIENT_ID = ".intval($client_arr[0]['CLIENT_ID']))) ) {
		
		$order_item_arr = sql_select("select * from ORDER_ITEM where ORDERS_ID = " . intval($this -> q_param['orders_id']));
		
		for ($i = 0; $i < count($order_item_arr); $i++) {
			$totalAmount += $order_item_arr[$i]['QUANTITY']*$order_item_arr[$i]['PRICE'];
			$order_item_arr[$i]['_productURL'] = $this -> getProductUrl($order_item_arr[$i]['CONTENT_ID']);
		}

		$currency = sql_select("select CS.NAME_SHORT
									from
									    ORDERS O,
									    CURRENCY_SHOP CS
									where
									     O.ORDERS_ID = ".intval($this -> q_param['orders_id'])." and
									     O.CURRENCY_SHOP_ID = CS.CURRENCY_SHOP_ID");

		$this -> tmpl -> setLoop('_order_item_loop', $order_item_arr);
		$this -> tmpl -> setVar('_totalAmount', $totalAmount);
		$this -> tmpl -> setVar('_currency', $currency[0]['NAME_SHORT']);
		$this -> tmpl -> setVar('_orders_id', $this -> q_param['orders_id']);		
		$this -> tmpl -> setVar('_returnURL', make_query_string(array('orders_id' . $this -> tarea_id => "")) );		
	
	} else {
		
		$sSQL_orders = "select distinct
							O.ORDERS_ID,
							O.TRACK_NUMBER,
							O.FIO,
							O.DATE_RECEIPT,
							O.TOTAL_SUM, 
							OS.NAME as ORDER_STATUS_NAME, 
							CS.NAME_SHORT as _currency 
						from 
							ORDERS O, 
							ORDER_STATUS OS, 
							CURRENCY_SHOP CS 
						where 
							O.CLIENT_ID = ".intval($client_arr[0]['CLIENT_ID'])." and 
							O.ORDER_STATUS_ID = OS.ORDER_STATUS_ID and 
							O.CURRENCY_SHOP_ID = CS.CURRENCY_SHOP_ID and 
							OS.LANG_ID = ".intval($this -> lang_id)." 
						order by O.DATE_RECEIPT desc";

		$orders_arr = sql_select($sSQL_orders);
		
		$ordersQuantity = count($orders_arr);
		//навигация 
		if (count($orders_arr) > $this -> view_param['numPerPage'] && $this -> view_param['numPerPage'] > 0) {
			
			$navigation = page_navigation($this -> view_param['numPerPage'], 
			                             count($orders_arr),
			                             "from" . $this -> tarea_id,
			                             $this -> path_tmpl . "page_navigation.vtmpl");
			
			if ( !is_numeric($this -> q_param["from"]) || !$this -> q_param["from"] ) $from = 0;
			else {
				$from = $this -> q_param["from"] - 1 ;
				$from *= $this -> view_param['numPerPage'];
			}
			
			$orders_arr = sql_select($sSQL_orders . " limit " . intval($from) . ", " . intval($this -> view_param['numPerPage']) );
		}
	
		$this -> tmpl -> setVar('_pageNavigation', $navigation);
		
		for ($i = 0; $i < count($orders_arr); $i++) {
			$orders_arr[$i]['DATE_RECEIPT'] = unpack_date($orders_arr[$i]['DATE_RECEIPT'], 'long');
			$orders_arr[$i]['_orderItemURL'] = make_query_string( array( 'orders_id' . $this -> tarea_id => $orders_arr[$i]['ORDERS_ID']) );
		}

		$this -> tmpl -> setLoop('_orders_loop', $orders_arr);
		$this -> tmpl -> setVar('_orderQuantity', $ordersQuantity);
		$this -> tmpl -> setVar('_is_orders', 1);
	}
	
  }

  /***************************** Вариант использования "Напоминание забытого пароля" *******************/
  function modeReminder() {
  	
  	if ($this -> q_param['EMAIL'] && 
  		$client_arr = sql_select("select * from CLIENT where EMAIL = '".db_quote($this -> q_param['EMAIL'])."'")) {
  		
	    $fileTMPL = "{$this -> path_tmpl}reminderNotice.vtmpl";

	    // Формируется тело письма для клиента
	    if (!file_exists($fileTMPL)) $htmlBody = "Шаблон отсутствует: $fileTMPL";
	  	else {
	  		$htmlBody = new vlibTemplate();
			$htmlBody -> newTemplate($fileTMPL);
			$htmlBody -> hash2vlib($client_arr[0]);
			$htmlBody -> setVar('HTTP_HOST', $_SERVER['HTTP_HOST']);
			$htmlBody = $htmlBody -> grab();
	  	}

		$this -> tmpl -> hash2vlib($client_arr[0]);

		// Отсылается уведомление клиенту
		$this -> sendMail(
			 array( 'to' 		=> $this -> q_param['EMAIL'],
					'toName'   	=> "{$client_arr[0]['SURNAME']} {$client_arr[0]['NAME']} {$client_arr[0]['PATRONYMIC']}",
					'from'		=> 'webmaster@'.$_SERVER['HTTP_HOST'],
					'fromName'	=> $this->get_sysword("SYSW_CLIENT_REMINDER_FROM").$_SERVER['HTTP_HOST'],
					'subject'	=> $this->get_sysword("SYSW_CLIENT_REMINDER_SUBJ")." ".$_SERVER['HTTP_HOST'],
					'htmlBody'	=> $htmlBody));

  	} else {
  		
  		if ($this -> q_param['EMAIL']) {
  			
  			$this -> tmpl -> setVar('_is_error', 1);
	  		$this -> tmpl -> setVar('EMAIL', $this -> q_param['EMAIL']);
  		}
  		
  		$this -> tmpl -> setVar('_modeForm', 1);
  	}
  }

  /***************************** Вариант использования "Список адресов доставки" *******************/
  function modeDeliveryAddress() {
	
	if ( !$this -> modeAuth() ) return false;
	
	$this -> tmpl -> newTemplate($this -> path_tmpl . $this -> view_param["view_mode"] . ".vtmpl");
		
	$delivery_address_arr = array();
	//Форма добавление нового адреса доставки
	if ( $this -> q_param['action'] == 'add' ) {
		$this -> tmpl -> setVar( "_modeForm", 1);
		$this -> tmpl -> setLoop( "_delivery_address_loop", $delivery_address_arr);
		return true;
	}

	// Получение личных данных пользователя
	// Проверка допустимости значений клиентских cookies выполняется в shop->isRegistratedClient(),
	// который вызывается из this -> modeAuth()
	$client_arr = $this -> modeAuth();
	$client_arr = is_array($client_arr) ? 
                        $client_arr : 
                        sql_select("select * from CLIENT" 
                                  . " where CLIENT_ID = {$_COOKIE['client_id']}" 
                                  . " and RANDOM_NUMBER = {$_COOKIE['random_number']}");
	
	$sSQL_delivery_address = "select * from DELIVERY_ADDRESS where CLIENT_ID = " . intval($client_arr[0]['CLIENT_ID']);
	
	//Редактирование адреса
	if ( $this -> q_param['action'] == 'change' && 
		 $this -> q_param['DELIVERY_ADDRESS_ID'] &&
		 count(sql_select("select * from DELIVERY_ADDRESS where DELIVERY_ADDRESS_ID = " . 
			 				   intval($this -> q_param['DELIVERY_ADDRESS_ID']) . " and CLIENT_ID = " .
			 				   intval($client_arr[0]['CLIENT_ID']))) ) {
		 $sSQL_delivery_address = "select * from DELIVERY_ADDRESS 
		 							where 
		 								CLIENT_ID = " . intval($client_arr[0]['CLIENT_ID']) . " and 
		 								DELIVERY_ADDRESS_ID = " . intval($this -> q_param['DELIVERY_ADDRESS_ID']);
		 $this -> tmpl -> setVar( "_modeForm", 1);
	}
		 
	//Удаление адреса
	if ( $this -> q_param['action'] == 'delete' && 
		 $this -> q_param['DELIVERY_ADDRESS_ID'] &&
		 count(sql_select("select * from DELIVERY_ADDRESS where DELIVERY_ADDRESS_ID = " . 
			 				   intval($this -> q_param['DELIVERY_ADDRESS_ID']) . " and CLIENT_ID = " .
			 				   intval($client_arr[0]['CLIENT_ID']))) ) 
		delete_record('DELIVERY_ADDRESS', 'DELIVERY_ADDRESS_ID', intval($this -> q_param['DELIVERY_ADDRESS_ID']));
	
	//Добавление/изменение адреса доставки
	if ( $this -> q_param['TELEPHONE'] && $this -> q_param['ADDRESS'] && $this -> q_param['action'] != 'change' )

		if ( $this -> q_param['DELIVERY_ADDRESS_ID']  && 
			 count(sql_select("select * from DELIVERY_ADDRESS where DELIVERY_ADDRESS_ID = " . 
			 				   intval($this -> q_param['DELIVERY_ADDRESS_ID']) . " and CLIENT_ID = " .
			 				   intval($client_arr[0]['CLIENT_ID']))) ) 

			update_record('DELIVERY_ADDRESS', array(
					array( 'name' =>'FIO', 'value' => ( trim($this -> q_param["FIO"], " ") ? 
												db_quote($this -> q_param["FIO"]) : 
												db_quote($client_arr[0]["SURNAME"]) . " " . 
												db_quote($client_arr[0]["NAME"]) . " " . 
												db_quote($client_arr[0]["PATRONYMIC"]) ) ),
					array( 'name' =>'ADDRESS', 'value' => db_quote($this -> q_param["ADDRESS"]) ),
					array( 'name' =>'TELEPHONE', 'value' => db_quote($this -> q_param["TELEPHONE"]) ),
					array( 'name' =>'NOTE', 'value' => db_quote($this -> q_param["NOTE"]) ),
					array( 'name' =>'FAX', 'value' => db_quote($this -> q_param["FAX"]) )), 
					'DELIVERY_ADDRESS_ID' , intval($this -> q_param['DELIVERY_ADDRESS_ID']));
		else 
			insert_record('DELIVERY_ADDRESS', array(
					array( 'name' =>'CLIENT_ID', 'value' => intval($client_arr[0]['CLIENT_ID']) ),
					array( 'name' =>'FIO', 'value' => ( trim($this -> q_param["FIO"], " ") ? 
												db_quote($this -> q_param["FIO"]) : 
												db_quote($client_arr[0]["SURNAME"]) . " " . 
												db_quote($client_arr[0]["NAME"]) . " " . 
												db_quote($client_arr[0]["PATRONYMIC"]) ) ),
					array( 'name' =>'ADDRESS', 'value' => db_quote($this -> q_param["ADDRESS"]) ),
					array( 'name' =>'TELEPHONE', 'value' => db_quote($this -> q_param["TELEPHONE"]) ),
					array( 'name' =>'NOTE', 'value' => db_quote($this -> q_param["NOTE"]) ),
					array( 'name' =>'FAX', 'value' => db_quote($this -> q_param["FAX"]) ) ));

	$delivery_address_arr = sql_select($sSQL_delivery_address);

	$this -> tmpl -> setLoop("_delivery_address_loop", $delivery_address_arr);
  }

  /**
   * Генерация строки случайных цифр
   *
   * @return string Строка из 18-ти случайных цифр
   */
  function RandomNumberStr(){
    return  rand(100000000, 999999999) . rand(100000000, 999999999);
  }

  /***************************** Вариант использования "Личные данные" *******************/
  function modePersonData() {
	
	// Проверка авторизации
	if (($client_arr = $this->modeAuth()) === false) {
        return false;
    }
		
	if ( is_array($client_arr) ) {
		
		$this -> q_param['EMAIL'] = $client_arr[0]['EMAIL'];
		$this -> q_param['PASSWORD'] = $client_arr[0]['PASSWORD'];
		$this -> q_param['PASSWORD2_'] = $client_arr[0]['PASSWORD'];
		
		$afterAuth = true;
		$this -> tmpl -> setVar( "_afterAuth", 1);

	} else 	{
	    // Если $this->modeAuth() вернул true, значит cookies проверены
	    // Получаем данные пользователя
	    $client_arr = sql_select("select * from CLIENT"
	                            . " where CLIENT_ID = {$_COOKIE['client_id']}" 
	                            . " and RANDOM_NUMBER = {$_COOKIE['random_number']}");
	}

    $this -> tmpl -> newTemplate($this -> path_tmpl . $this -> view_param["view_mode"] . ".vtmpl");
	
	$this -> tmpl -> hash2vlib($client_arr[0]);
	
	$this -> tmpl -> setVar( "PASSWORD2_", $client_arr[0]["PASSWORD"]);
	
	// Запоминание параметров сценария, содержащего форму изменения личных данных,
	// что необходимо для правильного редиректа после обновления cookies
	$url_params = '';
	if (!isset($this->q_param['url_params'])) {
	    $url_params = ($_SERVER['QUERY_STRING'] !== '' ? $_SERVER['QUERY_STRING'] : '');
        // нужно исключить индикатор обновления cookies (если он есть)
        $params_arr = explode('&', $url_params);
        $found = false;
        foreach ($params_arr as $key => $pair) {
            list($pname, $pvalue) = explode('=', $pair);
            if ($pname == ('cupd' . $this->tarea_id)) {
                $found = true;
                break;
            }
        }
        if ($found) {
            unset($params_arr[$key]);
            $url_params = implode('&', $params_arr);
        }
    } else {
        $url_params =  $this->q_param['url_params'];
    }
    
    $this->tmpl->setVar('url_params', $url_params);
   
    // При обновлении данных пользователь сменил пароль и ему были обновлены cookies
	if (isset($this->q_param['cupd']) && 1 == intval($this->q_param['cupd'])) { 
       $this->tmpl->setVar("_is_update", 1); 
       // Удаляем более ненужный параметр, чтобы $this->isCorrectClientData() отработал правильно
       unset($this->q_param['cupd']);
	}

	if ( $client_arr[0]["CLIENT_TYPE"] ) {
	    $this->tmpl->setVar( "_is_legal_person", 1);
	}

	//Проверка измененных данных
	if ( !$this -> isCorrectClientData($afterAuth, $client_arr[0]["EMAIL"]) ) return false;
	
	if ( !$afterAuth ) {
	    
        $update_cookie = false;
        
		// Если поле пароля осталось пустым, не меняем старый пароль
		if($this->q_param["PASSWORD"] == "") $this->q_param["PASSWORD"] = $client_arr[0]["PASSWORD"];
    	
		if ($client_arr[0]["PASSWORD"] != $this->q_param["PASSWORD"]) 
		{
    	    // Если пользователь поменял пароль, то случ.число генерится вновь
    	    $client_arr[0]['RANDOM_NUMBER'] = $this->RandomNumberStr();    	    
    	    $update_cookie = true;    
    	}

		update_record('CLIENT', array(
                    				array( 'name' =>'SURNAME', 		'value' => db_quote($this -> q_param["SURNAME"]) ),
                    				array( 'name' =>'NAME', 		'value' => db_quote($this -> q_param["NAME"]) ),
                    				array( 'name' =>'PATRONYMIC', 	'value' => db_quote($this -> q_param["PATRONYMIC"]) ),
                    				array( 'name' =>'EMAIL', 		'value' => db_quote($this -> q_param["EMAIL"]) ),
                    				array( 'name' =>'PASSWORD', 	'value' => db_quote($this -> q_param["PASSWORD"]) ),
                    				array( 'name' =>'LEGAL_PERSON', 'value' => db_quote($this -> q_param["LEGAL_PERSON"]) ),
                    				array( 'name' =>'ADDRESS', 		'value' => db_quote($this -> q_param["ADDRESS"]) ),
                    				array( 'name' =>'INN', 			'value' => db_quote($this -> q_param["INN"]) ),
                    				array( 'name' =>'KPP', 			'value' => db_quote($this -> q_param["KPP"]) ),
                    				array( 'name' =>'R_ACCOUNT', 	'value' => db_quote($this -> q_param["R_ACCOUNT"]) ),
                    				array( 'name' =>'BANK_NAME', 	'value' => db_quote($this -> q_param["BANK_NAME"]) ),
                    				array( 'name' =>'K_ACCOUNT', 	'value' => db_quote($this -> q_param["K_ACCOUNT"]) ),
                    				array( 'name' =>'BIK', 			'value' => db_quote($this -> q_param["BIK"]) ),
                    				array( 'name' =>'CODE_OKPO', 	'value' => db_quote($this -> q_param["CODE_OKPO"]) ),
                    				array( 'name' =>'CODE_OKONH', 	'value' => db_quote($this -> q_param["CODE_OKONH"]) ),
                    				array( 'name' =>'TELEPHONE', 	'value' => db_quote($this -> q_param["TELEPHONE"]) ),
                    				array( 'name' =>'FAX', 			'value' => db_quote($this -> q_param["FAX"]) ),
                    				array('name' =>'RANDOM_NUMBER', 'value' => db_quote($client_arr[0]['RANDOM_NUMBER']))
				                ), 'CLIENT_ID' , intval($client_arr[0]['CLIENT_ID']));
		
		$this->tmpl->setVar( "_is_update", 1);

        // Обновление случайного числа в клиентских cookies		
		if ($update_cookie) {
            // после обновления cookies необходимо сообщить сценарию, что данные пользователя были успешно изменены
            $add_param = 'cupd' . $this->tarea_id . '=1';
            $url_params = $url_params !== '' ? '?' . $url_params . '&' . $add_param  : '?' . $add_param;
            
            $this->setCookieToClient($client_arr[0]['CLIENT_ID'], $client_arr[0]['RANDOM_NUMBER']);
            
		    // Для действительного обновления cookies необходим переход по "новому" URL
		    // Переход всегда осуществляется по относительному URL
		    // во избежание проблем с подменой URL и выходом за пределы текущего сайта
		    header("Location: {$_SERVER['PHP_SELF']}{$url_params}"); 
		    exit(0);
		}
	}
  }

  /***************************** Вариант использования "Форма регистрации" *******************/
  function modeRegistration() {
	
	if (!$this -> isCorrectClientData()) return false;
	
	insert_record('CLIENT', array(
			array( 'name' =>'SURNAME', 		'value' => db_quote($this -> q_param["SURNAME"]) ),
			array( 'name' =>'NAME', 		'value' => db_quote($this -> q_param["NAME"]) ),
			array( 'name' =>'PATRONYMIC', 	'value' => db_quote($this -> q_param["PATRONYMIC"]) ),
			array( 'name' =>'CLIENT_TYPE', 	'value' => db_quote($this -> q_param["CLIENT_TYPE"]) ),
			array( 'name' =>'EMAIL', 		'value' => db_quote($this -> q_param["EMAIL"]) ),
			array( 'name' =>'PASSWORD', 	'value' => db_quote($this -> q_param["PASSWORD"]) ),
			array( 'name' =>'LEGAL_PERSON', 'value' => db_quote($this -> q_param["LEGAL_PERSON"]) ),
			array( 'name' =>'ADDRESS', 		'value' => db_quote($this -> q_param["ADDRESS"]) ),
			array( 'name' =>'INN', 			'value' => db_quote($this -> q_param["INN"]) ),
			array( 'name' =>'KPP', 			'value' => db_quote($this -> q_param["KPP"]) ),
			array( 'name' =>'R_ACCOUNT', 	'value' => db_quote($this -> q_param["R_ACCOUNT"]) ),
			array( 'name' =>'BANK_NAME', 	'value' => db_quote($this -> q_param["BANK_NAME"]) ),
			array( 'name' =>'K_ACCOUNT', 	'value' => db_quote($this -> q_param["K_ACCOUNT"]) ),
			array( 'name' =>'BIK', 			'value' => db_quote($this -> q_param["BIK"]) ),
			array( 'name' =>'CODE_OKPO', 	'value' => db_quote($this -> q_param["CODE_OKPO"]) ),
			array( 'name' =>'CODE_OKONH', 	'value' => db_quote($this -> q_param["CODE_OKONH"]) ),
			array( 'name' =>'TELEPHONE', 	'value' => db_quote($this -> q_param["TELEPHONE"]) ),
			array( 'name' =>'FAX', 			'value' => db_quote($this -> q_param["FAX"]) ),
			array( 'name' =>'RANDOM_NUMBER', 'value' => $this->RandomNumberStr())
	));
	
	$client_arr = sql_select("select * from CLIENT where EMAIL = '" . db_quote($this -> q_param["EMAIL"]) . "'");
	
	$this -> setCookieToClient($client_arr[0]['CLIENT_ID'], $client_arr[0]['RANDOM_NUMBER']);
	
    $fileTMPL = "{$this -> path_tmpl}registrationNotice.vtmpl";
    
    // Формируется тело письма для менеджера и клиента
    if (!file_exists($fileTMPL)) $htmlBodyToManager = "Шаблон отсутствует: $fileTMPL";
  	else {
  		$htmlBody = new vlibTemplate();
		
		$htmlBody -> newTemplate($fileTMPL);
		$htmlBody -> hash2vlib($this -> q_param);
		$htmlBody -> setVar('HTTP_HOST', $_SERVER['HTTP_HOST']);
		$htmlBodyToManager = $htmlBody -> grab();
		
		$htmlBody -> newTemplate($fileTMPL);
		$htmlBody -> setVar('toClient', 1);
		$htmlBodyToClient = $htmlBody -> grab();
  	}

	$param = array( 'to' 		=> $this -> q_param['EMAIL'],
					'toName'   	=> "{$client_arr[0]['SURNAME']} {$client_arr[0]['NAME']} {$client_arr[0]['PATRONYMIC']}",
					'from'		=> 'webmaster@'.$_SERVER['HTTP_HOST'],
					'fromName'	=> $this->get_sysword("SYSW_CLIENT_REGISTRATION_FROM").$_SERVER['HTTP_HOST'],
					'subject'	=> $this->get_sysword("SYSW_CLIENT_REGISTRATION_SUBJ")." ".$_SERVER['HTTP_HOST'],
					'htmlBody'	=> $htmlBodyToClient);

	// Отсылается уведомление клиенту
	$this -> sendMail($param);

	$param['toName'] 	= 'Уважаемый администратор!';
	$param['subject'] 	= 'Регистрация нового покупателя';
	$param['htmlBody'] 	= $htmlBodyToManager;
	
	// Отсылается уведомление менеджеру
	if ($mailArr = preg_split("/[,; ]+/", $this -> view_param['emailToNotice'])) {
 		for	($i = 0; $i < count($mailArr); $i++) {
 			
 			if (preg_match('/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9_-]+(\.[_a-z0-9-]+)+$/i', $mailArr[$i])) {

	 			$param['to'] = $mailArr[$i];
				$this -> sendMail($param);
			}
		}
	}
	
	$this -> tmpl -> setVar('_is_registrated', 1);
  }

  /***************************** isCorrectClientData *******************/
  function isCorrectClientData( $afterAuth = false , $email = "" ) { // зарегистрированного пользователя
  /*
  	Проверяет корректность данных введенных пользователем
  */
    // Если не передан ни один параметр.
	if ( !count($this -> q_param) ) 
    {
        $this -> tmpl -> setVar( generateCaptchaCode() );
        return false;
    }
	
	if ( !$afterAuth ) {
		
		foreach ($this -> q_param as $key => $value) 
			$this -> tmpl -> setVar($key, $value);
		
		// Если регистрируется юридическое лицо
		if ( $this -> q_param["CLIENT_TYPE"] ) $this -> tmpl -> setVar( "_is_legal_person", 1);
	}
	
	// Проверяется email
	if ( !$this -> q_param["EMAIL"] ) {
		$this -> tmpl -> setVar( "_error3", 1);
		$is_error = true;
	}

	// Проверяется уникальность логина пользователя (email)
	if ( count(sql_select("select * from CLIENT where EMAIL = '" . db_quote($this -> q_param["EMAIL"]) . "'")) && 
		 $this -> view_param['view_mode'] == 'registration' ) {
		$this -> tmpl -> setVar( "_error1", 1);
		$is_error = true;
	}
	
	if ( $this -> q_param["EMAIL"] != $email && 
		 count(sql_select("select * from CLIENT where EMAIL = '" . db_quote($this -> q_param["EMAIL"]) . "'")) && 
		 $this -> view_param['view_mode'] == 'person_data' ) {
		$this -> tmpl -> setVar( "_error1", 1);
		$is_error = true;
	}

	// Проверяет правильность введенных паролей
	if ( ($this -> q_param["PASSWORD"] != $this -> q_param["PASSWORD2_"]) 
		      /* при персонализации пустое поле пароля возможно (в этом случае пароль не меняется)  */
	         || (!$this -> q_param["PASSWORD"] && $this->view_param["view_mode"] != "person_data")  ) {
		
		$this -> tmpl -> setVar( "_error2", 1);
		$is_error = true;
	}
	
	//В случае если регистрируется юр. лицо.
	if ( $this -> q_param["CLIENT_TYPE"] && !$this -> q_param["LEGAL_PERSON"] ) 
    {
        // Заново генерим картинку
        $this-> tmpl -> setVar( generateCaptchaCode() );
        return false;
	}

	// Здесь проверяем код на картинке
    if( !checkCaptchaCode($this->q_param['captcha_id'], $this->q_param['captcha_value']) )
    {
        $this->tmpl->setVar("_error4", 1);
        $is_error = true;
    }
    
    if ( $is_error ) {
       // Заново генерим картинку
        $this -> tmpl -> setVar(generateCaptchaCode());
 		$this -> tmpl -> setVar( "_is_error", 1);
		return false;
	}

	return true;
  }

  /**
   * Отключается кэширование модуля
   * @return boolean
   */
  function get_hash_code() {return false;}
  
}
?>